package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.Domain;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.PageResult;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 所有的service继承该接口,提供基础的增删改查方法
 *
 * @param <T>
 */
//public interface BaseService<T extends Domain> extends IService<T> {
public interface BaseService<T extends Domain> {

    T addDomain(T t);

    boolean addDomainBatch(List<T> list);

    /**
     * 根据主键id删除数据
     *
     * @param id
     * @return
     */
    boolean delById(Long id);

    /**
     * 根据匹配条件删除数据
     *
     * @param domain
     * @return
     */
    int delDomain(T domain);

    void delByIds(List<Long> ids);

    T updateDomain(T domain);

    T updateDomainNullId(T domain, String col, Object obj);

    boolean saveOrUpdateBatch(List<T> list);

    boolean updateBatchById(List<T> list);

    T getDomain(T t);

    T getById(Long id);

    T check(Long id);

    List<T> findByIds(List<Long> ids);

    List<T> findList(T t);

    List<T> list(T t);

    List<T> findList(T t, PageDomain pageDomain);

    List<T> findListLike(T t);

    int countByDomain(T domain);
    int countByDomain(T domain, Date startTime, Date endTime, String cloTime);

    int countByDomain(T domain, Date startTime, Date endTime);

    PageResult<T> findPage(T t, PageDomain pageDto);

    BigDecimal sum(String clo, T t, Date startTime, Date endTime);
    BigDecimal sum(String clo, T t, Date startTime, Date endTime, String cloTime);
}
